/**
* Control de Atributos
*
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
* @version Version 1.0
*
*/
/**
* Archivo JavaScript para agregar una nueva habitacion
*
* @version 1.0
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
*
* Creado el : 20/Noviembre/2011
* Actualizado el: 20/Noviembre/2011
*/
/** Las clases se encuentran en {root}/extjs4/src/ */


Ext.require(['*']);
Ext.ns('Sistema.FrontEnd');
Ext.Loader.setConfig({enabled:true});


Ext.define('modelAtributos', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'POST',
		//url : '/roles', //application/controllers/Habitacion.php
		
		api: {
			read: '/atributos/view',
			create: '/atributos/create',
			save: '/atributos/update',
			destroy: '/atributos/destroy'
		},
		reader: {				
			type: 'json',
			successProperty: 'success',
			root: 'atributos',
			messageProperty: 'message'
		},
		writer: {
			type: 'json',
			writeAllFields: false,
			root: 'atributo'
		},
	},
	fields: [
		{type: 'int' , name: 'idAtributo'},
		{type: 'string', name: 'nombreAtributo'},
		{type: 'string', name: 'datoAtributo'},
		{type: 'string', name: 'observAtributo'}
		]
});


Ext.define('modelTipos_Datos', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'GET',
		url : '/permisos/view', //application/controllers/Habitacion.php
		
		api: {
			read: '/tipos_datos/view',
			create: '/tipos_datos/create',
			save: '/tipos_datos/update',
			destroy: '/tipos_datos/destroy'
		},
		reader: {
			//actionMethods : 'GET',
			type : 'json',
			idProperty : 'idTipo_Dato',
			root : 'tipos_datos',
			totalProperty : 'totalTipos_Datos'
		}
	},
	fields: [
		{type: 'int' , name: 'idTipo_Dato'},
		{type: 'string', name: 'nombreTipo_Dato'}
	]
}); 


Sistema.FrontEnd.AdmAtributos = { //Begin Main Class
	inicio : function(){ //Begin function inicio
			//Ext.Msg.alert('Estoy en Inicio');
		
			Ext.QuickTips.init();
			var registroSeleccionado;
			//Creacion del Store para el DataGrid de las habitaciones
			this.StoreAtributos = Ext.create('Ext.data.Store', {
				model : 'modelAtributos',
				autoLoad : true
			});
			
			//DataStore para el ComboBox de la lista de datos
			this.dsCmbTipos_Datos = Ext.create('Ext.data.Store', {
				model : 'modelTipos_Datos',
				autoLoad : true
			}); 
			
			this.cmbTipos_Datos = Ext.create('Ext.ux.form.field.BoxSelect', {
				
				fieldLabel: 'Tipo de Dato',
				name : 'cmb_tipos_datos',
				id: 'id_cmbx_tipos_datos',
				displayField: 'nombreTipo_Dato',
				width: 494,
				height: 50,
				//labelWidth: 130,
				store: this.dsCmbTipos_Datos,
				queryMode: 'local',
				emptyText: 'Seleccione el Tipo de Dato a ser asignado',
				valueField: 'idTipo_Dato',
				multiSelect :false,
				allowBlank : false
			}); 
			
		
		/** Barra de iconos para el DataGridView de las Habitaciones */
		this.TblGridAtributos = Ext.create('Ext.toolbar.Toolbar',{
			items : [
				{
					xtype : 'button',
					id : 'id_btn_grid_agregar',
					itemId : 'id_btn_grid_agregar',
					text : 'Agregar Atributo',
					iconCls : 'icon_button_add',
					disabled : false,
					tooltip : 'Agregar un Nuevo Atributo',
					scope : this,
					handler : this.AgregarRecordSelect
				},{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : 'btn_grid_editar',
					itemId : 'btn_grid_editar',
					text : 'Editar Registro',
					iconCls : 'icon_btn_grid_editar',
					disabled : true,
					tooltip : 'Editar el registro seleccionado',
					scope : this,
					handler : this.EditRecordSelect
				},{
					xtype : 'tbseparator'
					},{
					xtype : 'button',
					id : 'btn_grid_eliminar',
					itemId : 'btn_grid_eliminar',
					text : 'Eliminar Registro',
					iconCls : 'icon_btn_grid_eliminar',
					disabled : true,
					tooltip : 'Eliminar el registro seleccionado',
					scope : this,
					handler : this.DeleteRecordSelect
				},{
					xtype : 'tbseparator'
				}
			]
		});
		this.GridAtributos = Ext.create('Ext.grid.Panel',{
			title : 'Lista de Atributos',
			frame : true,
			store : this.StoreAtributos,
			stripeRows : true,
			columnLines: true,
			loadMask : true,
			width : 550,
			height : 400,
			dockedItems : [this.TblGridAtributos],
			columns : [
				Ext.create('Ext.grid.RowNumberer'),
				{
					text : "idAtributo",
					dataIndex : 'idAtributo',
					hidden : true
				},{ 
					text : "Atributo",
					dataIndex : "nombreAtributo",
					sortable : false,
					resizable : false,
					width : 200
				},{
					text : "Tipo de Dato",
					dataIndex : "datoAtributo",
					sortable : false,
					resizable : false,
					width : 200
				},{
					text : "Observación",
					dataIndex : "observAtributo",
					sortable : false,
					resizable : false,
					width : 220
				}
			],
			listeners : {
				scope : this, 
				'selectionchange': function(view, records) {
					//Activar los botones del DataGrid
					//La propiedad #btn_grid_editar corresponde al itemId asignado al item en el componente Toolbar del DataGrid
					this.GridAtributos.down('#btn_grid_editar').setDisabled(!records.length);
					this.GridAtributos.down('#btn_grid_eliminar').setDisabled(!records.length);
				}
			},
			bbar: Ext.create('Ext.PagingToolbar', {
				store : this.StoreAtributos,
				displayInfo : true,
				displayMsg : 'Mostrando registros {0} - {1} de {2}',
				emptyMsg : "Sin registros para mostrar"
			})
		});
		//Agregamos el DataGrid this.GridHabitaciones
		this.PanelGridAtributos = Ext.create('Ext.panel.Panel',{
			border : false,
			bodyPadding : '5 10 10 10',
			items : [this.GridAtributos]
		});
		//Ventana del modulo actual
		this.WindowAdmAtributos = Ext.create('Ext.window.Window',{
			title : 'Administración de Tipos de Atributo',
			id : 'id_WindowWindowAdmAtributos',
			iconCls : 'icon_window_application',
			region : 'center',
			width : 583,
			height : 450,
			//layout : 'fit',
			resizable : false,
			draggable : true,
			closable : true,
			closeAction :'hide',
			items : [this.PanelGridAtributos]
		});
		this.WindowAdmAtributos.show()
		
	},
	
	AgregarRecordSelect : function(){
		//Creamos el FormPanel que contendra los datos a agregar
		this.FormAddModal = Ext.create('Ext.form.Panel',{
			frame :true,
			title : 'Datos del Atributo',
			bodyStyle :'padding:5px 5px 0',
			width : 550,
			height : 250,
			defaultType: 'textfield',
			items: [{
						fieldLabel : 'Nombre del Atributo',
						id : 'nombreAtributo',
						name : 'nombreAtributo',
						anchor : '90%',
						allowBlank : false
					},{
						xtype : 'fieldcontainer',
						labelStyle : 'font-weight:bold;padding:0',
						items: [this.cmbTipos_Datos,]
					},{
						fieldLabel : 'Observacion',
						id : 'observAtributo',
						name : 'observAtributo',
						anchor : '90%',
						allowBlank : false
					}
			],
			buttons: [{
						text : 'Guardar',
						id : 'id_btn_guardar',
						iconCls : 'icon_button_save',
						scope : this,
						handler : this.HandlerGuardarDatosAtributo
						},{
						text : 'Cancelar',
						id : 'id_btn_cancelar',
						iconCls : 'icon_button_cancel',
						scope : this,
						handler : function(){
							this.WindowFormAddModal.close();
						}
					}
			]
		});
		//Una vez creado el FormPanel lo reseteamos
		this.FormAddModal.getForm().reset();
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		this.WindowFormAddModal = Ext.create('Ext.window.Window',{
			title : 'Agregar Nuevo Atributo',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 580,
			height : 300,
			modal : true,
			//resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'hide',
			items : [this.FormAddModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormAddModal.show();
		
	},
	
	
	
	//Funcion para mostrar la ventana con el formulario de edicion
	//El formulario de edicion contiene los datos del registro seleccionado para su edicion
	EditRecordSelect : function(){
		//Creamos el FormPanel que contendra los datos a editar
		this.FormEditModal = Ext.create('Ext.form.Panel',{
			frame :true,
			title : 'Datos del Atributo',
			bodyStyle :'padding:5px 5px 0',
			width : 550,
			height : 200,
			fieldDefaults: {
				msgTarget : 'side',
				labelWidth : 120,
				labelStyle : 'font-size:11px;',
				fieldStyle : 'font-size:11px;'
			},
			defaultType: 'textfield',
			items: [{
					//fieldLabel : 'Id Habitacion',
					id : 'idAtributo',
					name : 'idAtributo',
					anchor : '50%',
					hidden : true,
					allowBlank : false
				},{
					fieldLabel : 'Nombre del Atributo',
					id : 'nombreAtributo',
					name : 'nombreAtributo',
					anchor : '80%',
					allowBlank : false
				},{
					fieldLabel : 'Tipo de Dato del Atributo',
					id : 'datoAtributo',
					name : 'datoAtributo',
					anchor : '80%',
					hidden : false,
					allowBlank : false
				},{
					fieldLabel : 'Observacion del Atributo',
					id : 'observAtributo',
					name : 'observAtributo',
					anchor : '80%',
					hidden : false,
					allowBlank : false
				}
			],
			buttons: [{
					text : 'Guardar',
					id : 'id_btn_editar_guardar',
					iconCls : 'icon_button_save',
					scope : this,
					handler : this.HandlerActualizarDatosAtributo
				},{
					text : 'Cancelar',
					id : 'id_btn_editar_cancelar',
					iconCls : 'icon_button_cancel',
					scope : this,
					handler : function(){
						this.WindowFormEditModal.close();
					}
				}
			]
		});
		//Una vez creado el FormPanel lo reseteamos
		this.FormEditModal.getForm().reset();
		//Obtenemos el registro seleccionado del Grid
		registroSeleccionado = this.GridAtributos.getSelectionModel().getSelection()[0].data.idAtributo;
		
		//setamos los valores del grit a ser editados
		Ext.getCmp('idAtributo').setValue(this.GridAtributos.getSelectionModel().getSelection()[0].data.idAtributo);
		Ext.getCmp('nombreAtributo').setValue(this.GridAtributos.getSelectionModel().getSelection()[0].data.nombreAtributo),
		Ext.getCmp('datoAtributo').setValue(this.GridAtributos.getSelectionModel().getSelection()[0].data.datoAtributo),
		Ext.getCmp('observAtributo').setValue(this.GridAtributos.getSelectionModel().getSelection()[0].data.observAtributo),
		
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		
		this.WindowFormEditModal = Ext.create('Ext.window.Window',{
			title : 'Editar registro seleccionado',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 580,
			height : 250,
			modal : true,
			resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'hide',
			items : [this.FormEditModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormEditModal.show();
	},

	HandlerGuardarDatosAtributo:function(){
		Ext.Msg.alert("Info",this.FormAddModal.getForm().isValid());
		if (this.FormAddModal.getForm().isValid()){
			Ext.Msg.alert("Info","Pasé la validación");
			
			var rec = new modelAtributos({
				//id: Ext.getCmp('idAtributo').getValue(),
				nombreAtributo: Ext.getCmp('nombreAtributo').getValue(),
				//tipoDato: Ext.getCmp('datoAtributo').getValue(),
				observAtributo: Ext.getCmp('observAtributo').getValue()
			});
			
			
			this.FormAddModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/atributos/create', 
				clientValidation : true,
				scope : this,
				params : {
					id_tipo_dato : Ext.JSON.encode(Ext.getCmp('id_cmbx_tipos_datos').getValue()),
					atributo : Ext.JSON.encode(rec)
				},
				success: function(form, action){
					this.WindowFormAddModal.close();
					this.StoreAtributos.load();
				},
				failure: function(form, action){
					Ext.Msg.alert("Error",action.result);
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
	
	
	HandlerActualizarDatosAtributo:function(){
		Ext.Msg.alert("Info",this.FormEditModal.getForm().isValid());
			
		if (this.FormEditModal.getForm().isValid()){
			
			var rec = new modelAtributos({
				id: Ext.getCmp('idAtributo').getValue(),
				nombre: Ext.getCmp('nombreAtributo').getValue(),
				//tipoDato: Ext.getCmp('datoAtributo').getValue(),
				observacion: Ext.getCmp('observAtributo').getValue()
			});
			
			this.FormEditModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/atributos/update', //application/controllers/Habitacion.php
				clientValidation : true,
				scope : this,
				params : {
					atributo : Ext.JSON.encode(rec)
					/*idRol : Ext.getCmp('idRol').getValue(),
					nombreRol : Ext.getCmp('nombreRol').getValue(),
					descripRol : Ext.getCmp('descripRol').getValue(),
					//param_descripHabitacion : Ext.getCmp('descripHabitacion').getValue()*/
				},
				success: function(form, action){
					this.WindowFormEditModal.close();
					this.StoreAtributos.load();
				},
				failure: function(form, action){
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
	DeleteRecordSelect : function(){
		Ext.MessageBox.show({
			title : "Información del sistema",
			msg : "¿Realmente desea eliminar el registro seleccionado?",
			buttons : Ext.MessageBox.YESNO,
			icon : Ext.MessageBox.INFO,
			scope : this,
			fn : this.EliminarRegistroSeleccionado,
			width : 400
		});
	},
	EliminarRegistroSeleccionado : function(btn){
		if (btn == 'yes') { //btn=='yes'
			this.WindowAdmAtributos.el.mask('Eliminando datos....Espere por favor...');
			registroSeleccionado = this.GridAtributos.getSelectionModel().getSelection()[0].data.idAtributo;
			Ext.Ajax.request({
				url : '/atributos/destroy', //application/controllers/Habitacion.php
				method : 'POST',
				scope : this,
				params : {
					param_idAtributo : registroSeleccionado
				},
				success: function(response, opts) { //success
					var obj = Ext.JSON.decode(response.responseText);
					if(obj.success==true){
						this.StoreAtributos.load();
						this.WindowAdmAtributos.el.unmask();
					}
					else if(obj.success==false){
						this.WindowAdmAtributos.el.unmask();
							Ext.MessageBox.show({
								title : "Informacion del sistema",
								msg : obj.msg,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR,
								width : 400
							});
						}
					else{
						this.WindowAdmAtributos.el.unmask();
						Ext.MessageBox.show({
							title : "Informacion del sistema",
							msg : "Mensaje de error alternativo a la eliminacion del registro seleccionado",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					}
				}, //success
				failure: function(response, opts) { //failure
					this.WindowAdmAtributos.el.unmask();
					var obj = Ext.JSON.decode(response.responseText);
					Ext.MessageBox.show({
						title : "Informacion del sitema",
						msg : "Error de conexion al servidor de la base de datos",
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 400
					});
				} //failure
			});
		}else{
		}
	},
	
} //End Main Class
Ext.onReady(

/*function() {
		Ext.Msg.alert('Estoy en onReady!');
	}*/



Sistema.FrontEnd.AdmAtributos.inicio, Sistema.FrontEnd.AdmAtributos


);
/** Fin del archivo AgregarHabitacion.js**/
/** Ubicacion: {root}/javascript/ **/ 
